// 基于 axios 封装的请求模块
import theAxios from 'axios'
import router from '@/router'
// import { Notify } from 'vant'
// import { getToken, removeToken, setToken } from '@/utils/token'
import { getToken, removeToken } from '@/utils/token'
// import { getNewTokenAPI } from '@/api'
// 新建一个新的axios实例
const axios = theAxios.create({
  // baseURL: 'http://toutiao.itheima.net', // 基地址
  baseURL: 'http://geek.itheima.net/', // 基地址
  timeout: 20000 // 20秒超时时间(请求20秒无响应直接判定超时)
})

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 请求配置
  if (getToken()?.length > 0 && config.headers.Authorization === undefined) {
    config.headers.Authorization = `Bearer ${getToken()}`
  }
  return config
}, function (error) {
  // 请求错误
  return Promise.reject(error)
})

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 响应数据
  return response
}, async function (error) {
  // 响应错误
  // 如果状态码401表示身份过期跳转登录
  // 1.强制跳转登录
  if (error.response.status === 401) {
    removeToken()// 删除token
    router.replace(`/login?path=${router.currentRoute.fullPath}`)
  }
  // 2.刷新token不用登录
  // if (error.response.status === 401) {
  //   // Notify({ type: 'warning', message: '身份过期请重新登录' })
  //   removeToken()// 删除token
  //   // router.replace('/login')
  //   console.log(error)
  //   const res = await getNewTokenAPI()
  //   setToken(res.data.data.token)// 更新token
  //   error.config.headers.Authorization = `Bearer ${res.data.data.token}`// 更新token到请求头中
  //   return axios(error.config)// 未完成的请求再次发送
  // } else if (error.response.status === 500 && error.config.url === '/v1_0/authorizations' && error.config.method === 'put') {
  //   // 刷新token过期
  //   localStorage.clear()
  //   Notify({ type: 'warning', message: '身份过期请重新登录' })
  //   router.replace('/login')
  // }

  return Promise.reject(error)
})

// 导出自定义函数, 参数对象解构赋值
export default ({ url, method = 'GET', params = {}, data = {}, headers = {} }) => {
  return axios({
    url,
    method,
    params,
    data,
    headers
  })
}
